/*
 * snmp_oid.h
 *
 *  Created on: 2016-10-31
 *      Author: root
 */

#ifndef SNMP_OID_H_
#define SNMP_OID_H_
#include<sys/types.h>
#include<stdint.h>
#include"snmp_asn.h"
typedef struct _SnmpOidInfo{
char     strName[64];//中文名
uint32_t oidName[MAX_OID_LEN];//OID
int      oidLen;//长度
u_char   oidType;//OID类型
}SnmpOidInfo;

typedef struct _SnmpDataInfo{
uint32_t oidName[MAX_OID_LEN];//OID
int      oidLen;//长度
union{
int8_t      vali8;
uint8_t     valu8;
int16_t     vali16;
uint16_t    valu16;
int32_t     vali32;
uint32_t    valu32;
int64_t     vali64;
uint64_t    valu64;
char*       valstr;
}value;
int     valLen;//值占用长度
u_char  valType;//OID类型
char    data[1024];//构建数据时使用，解析时存储打印数据
int     datalen;//构建数据长度
_SnmpDataInfo*Next;
}SnmpDataInfo;

typedef struct _SnmpPacket{
int      version;
char *   community;
u_char   pdutype;
int      request_id;
int      error_status;
int      error_index;
SnmpDataInfo*data;
int     datalen;//构建的数据长度
}SnmpPacket;
//一致返回0
//前面比后面小返回1
//否则返回-1
int OidNameCmp(SnmpDataInfo*data,SnmpOidInfo oidinfo);
//根据后面OID长度来比较
int OidNameNCmp(SnmpDataInfo*data,SnmpOidInfo oidinfo);
//oid后跟IP
SnmpOidInfo OidNameAddIP(SnmpOidInfo oidinfo,const char*IP);
//创建请求句柄
SnmpPacket*CreateSnmpPacket(int version,const char*community,u_char pdutype,int request_id);
//增加请求Oid
int        AddSnmpRequestOid(SnmpPacket*Packet,const SnmpOidInfo oidinfo);
//构建发送Snmp包
int        WriteSnmpPacket(SnmpPacket*Packet,char*buff,int*len);
//读取一个Snmp包,失败返回空
SnmpPacket*ReadSnmpPacket(const char*buff,int len);
//释放Snmp包
SnmpPacket*FreeSnmpPacket(SnmpPacket*Packet);
//显示Snmp包
void ShowSnmpPacket(SnmpPacket*Packet);
//将OID数组换成字符串,一般用于描述
void MakeSnmpOid(char*buff,uint32_t*oidName,int oidLen);
#endif /* SNMP_OID_H_ */
